package com.zp.self.module.level_4_算法练习.数据结构.String;

/**
 * @author By ZengPeng
 */
public class 力扣_551_学生出勤记录I {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_551_学生出勤记录I().checkRecord("PPALLP"));
        System.out.println(new 力扣_551_学生出勤记录I().checkRecord("PPALLL"));
        System.out.println(new 力扣_551_学生出勤记录I().checkRecord("PPALL"));
    }

    /**
    题目：给你一个字符串 s 表示一个学生的出勤记录，其中的每个字符用来标记当天的出勤情况（缺勤、迟到、到场）。
     记录中只含下面三种字符：
     'A'：Absent，缺勤
     'L'：Late，迟到
     'P'：Present，到场
     如果学生能够 同时 满足下面两个条件，则可以获得出勤奖励：
     按 总出勤 计，学生缺勤（'A'）严格 少于两天。
     学生 不会 存在 连续 3 天或 连续 3 天以上的迟到（'L'）记录。
     如果学生可以获得出勤奖励，返回 true ；否则，返回 false 。

     示例 1：
     输入：s = "PPALLP"
     输出：true
     解释：学生缺勤次数少于 2 次，且不存在 3 天或以上的连续迟到记录。

     示例 2：
     输入：s = "PPALLL"
     输出：false
     解释：学生最后三天连续迟到，所以不满足出勤奖励的条件。

    分析：【P 💜】
       1.遍历：用变量记录缺勤天数。当为迟到时，判断前面两个是否为迟到
         --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户

    边界值 & 注意点：
       1.
     **/
    public boolean checkRecord(String s) {
        boolean isAbsent =false;
        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i)=='P') continue;
            if(s.charAt(i)=='A'){
                if(isAbsent)
                    return false;
                else
                    isAbsent=true;
            }else {
                if(i>1 && s.charAt(i-1)=='L' && s.charAt(i-2)=='L')
                    return false;
            }
        }

        return  true;
    }
}
